home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Champak 29
/
Volume 29 - JOGO DISK .iso
/
Games
/
jungle_adventure.swf
/
scripts
/
__Packages
/
SSCollision.as
< prev
next >
Wrap
Text File
|
2006-11-29
|
6KB
|
163 lines
class SSCollision
{
function SSCollision(point, normal, time, edge)
{
this.point = point;
this.normal = normal;
this.edge = edge;
this.time = time;
}
static function sweepSphereToStaticShape(sphere, shape, noData)
{
if(sphere.motionLeft > shape.right || sphere.motionRight < shape.left || sphere.motionTop > shape.bottom || sphere.motionBottom < shape.top)
{
return undefined;
}
var _loc16_ = sphere.motionVec;
var _loc9_ = sphere.motionDir;
var _loc5_ = sphere.motionDist;
var _loc15_ = sphere.motionTime;
var _loc4_ = sphere.radius;
var _loc25_ = undefined;
var _loc8_ = undefined;
var _loc23_ = undefined;
var _loc7_ = 255;
var _loc14_ = new Vector(sphere.x - shape.x,sphere.y - shape.y,0);
var _loc28_ = shape.colEdges;
var _loc26_ = _loc28_.length;
var _loc24_ = 0;
var _loc1_ = undefined;
var _loc10_ = undefined;
var _loc21_ = undefined;
while((_loc26_ = _loc26_ - 1) > -1)
{
if(_loc1_ = _loc28_[_loc26_].props & 1)
{
var _loc20_ = _loc1_.normal;
if(_loc9_.x * _loc20_.x + _loc9_.y * _loc20_.y < 0)
{
var _loc17_ = _loc1_.a;
_loc10_ = new Vector(_loc1_.center.x - _loc14_.x,_loc1_.center.y - _loc14_.y,0);
if(_loc10_.length - _loc4_ - _loc5_ <= _loc1_.radius)
{
var _loc2_ = new Vector(_loc14_.x - _loc17_.x,_loc14_.y - _loc17_.y);
var _loc18_ = new Vector(_loc2_.x - _loc1_.normal.x * _loc4_,_loc2_.y - _loc1_.normal.y * _loc4_);
var _loc11_ = _loc1_.span;
var _loc6_ = (_loc16_.x * (- _loc18_.y) - _loc16_.y * (- _loc18_.x)) / (_loc16_.y * _loc11_.x - _loc16_.x * _loc11_.y);
var _loc3_ = undefined;
if(_loc6_ >= 0 && _loc6_ <= 1)
{
var _loc12_ = new Vector(_loc11_.x * _loc6_ + _loc1_.normal.x * _loc4_,_loc11_.y * _loc6_ + _loc1_.normal.y * _loc4_,0);
var _loc22_ = new Vector(_loc12_.x - _loc2_.x,_loc12_.y - _loc2_.y);
if((_loc3_ = _loc22_.length) <= _loc5_)
{
if(_loc7_ < _loc3_ / _loc5_ * _loc15_)
{
continue;
}
_loc8_ = _loc12_;
_loc7_ = _loc3_ / _loc5_ * _loc15_;
_loc25_ = _loc1_.normal;
_loc23_ = _loc1_;
if(_loc7_ < 0.0001)
{
_loc7_ = 0;
_loc12_.x = _loc2_.x;
_loc12_.y = _loc2_.y;
break;
}
if((_loc24_ = _loc24_ + 1) >= 2)
{
break;
}
var _loc19_ = _loc1_.length * _loc6_;
if(_loc19_ > _loc4_ * 2 && _loc19_ < _loc1_.length - _loc4_ * 2)
{
break;
}
}
}
else
{
_loc12_ = _loc6_ <= 1 ? Vector.ZERO : _loc1_.span;
_loc10_ = _loc21_ = new Vector(_loc12_.x - _loc2_.x,_loc12_.y - _loc2_.y).length;
var _loc13_ = _loc21_.x * _loc9_.x + _loc21_.y * _loc9_.y;
_loc3_ = _loc4_ * _loc4_ - (_loc10_ * _loc10_ - _loc13_ * _loc13_);
if(_loc3_ > 0 && (_loc3_ = _loc13_ - Math.sqrt(_loc3_)) < _loc5_)
{
if(_loc7_ < _loc3_ / _loc5_ * _loc15_ || _loc3_ / _loc5_ < 0)
{
continue;
}
_loc7_ = _loc3_ / _loc5_ * _loc15_;
_loc23_ = _loc1_;
_loc8_ = new Vector(_loc2_.x + _loc3_ * _loc9_.x,_loc2_.y + _loc3_ * _loc9_.y,0);
(_loc25_ = new Vector(_loc8_.x - _loc12_.x,_loc8_.y - _loc12_.y,0)).normalize();
if(_loc7_ < 0.0001)
{
_loc8_.x = _loc2_.x;
_loc8_.y = _loc2_.y;
break;
}
if((_loc24_ = _loc24_ + 1) >= 2)
{
break;
}
}
}
}
}
}
}
if(_loc23_)
{
_loc8_.x += shape.x + _loc23_.a.x;
_loc8_.y += shape.y + _loc23_.a.y;
return new SSCollision(_loc8_,_loc25_,_loc7_,_loc23_);
}
return null;
}
static function sweepSphereToSphere(obj, sphObj, noData)
{
var _loc3_ = obj.radius + sphObj.radius;
var _loc6_ = undefined;
var _loc2_ = undefined;
var _loc4_ = undefined;
var _loc5_ = undefined;
_loc2_ = _loc6_ = new Vector(sphObj.x - obj.x,sphObj.y - obj.y,0).length;
var _loc9_ = undefined;
if(_loc2_ < _loc3_)
{
return true;
}
if(obj.motionDist < _loc2_ - _loc3_)
{
return false;
}
if((_loc4_ = _loc6_.x * obj.motionDir.x + _loc6_.y * obj.motionDir.y) < 0)
{
return false;
}
if((_loc5_ = _loc3_ * _loc3_ - (_loc2_ * _loc2_ - _loc4_ * _loc4_)) <= 0 || (_loc5_ = _loc4_ - Math.sqrt(_loc5_)) > obj.motionDist || _loc5_ < 0)
{
return undefined;
}
if(noData)
{
return true;
}
return false;
}
static function sweepBoundsToBounds(mObj, sObj, noData)
{
if(mObj.right >= sObj.left && mObj.left <= sObj.right && mObj.top <= sObj.bottom && mObj.bottom >= sObj.top)
{
return undefined;
}
if(mObj.motionRight >= sObj.left && mObj.motionLeft <= sObj.right && mObj.motionTop <= sObj.bottom && mObj.motionBottom >= sObj.top)
{
return true;
}
}
}